﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Linq;
using System.Net;

namespace Admin.cadastros
{
    public partial class cadastro : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                LojaAdminDataContext dc = new LojaAdminDataContext();
                List<TipPro> tipo = new List<TipPro>();
                tipo.Add(new TipPro() { TppID = 0, TppDes = "Selecione um item" });
                tipo.AddRange(dc.GetTable<TipPro>().ToList());
                dpdTipo.DataSource = tipo;
                dpdTipo.DataBind();

                HiddenField1.Value = Request.Params["proID"];
                dpdTipo.DataBind();
                HiddenField1.Value = Request.Params["id"];
                getData();
            }

            String script = @"$(document).ready(function () 
                                {  
                                    document.getElementsByTagName('select').item(0).options[0].value = '';
                                    combobox();
                                    $('.button').button({icons: {primary: 'ui-icon-disk'}});
                                    $('.delete').button({icons: {primary: 'ui-icon-trash'}});
                                    $('.sair').button({icons: {primary: 'ui-icon-cancel'}});
                                });
                            function valida(){ return jQuery('form').validationEngine('validate'); }"; 
            ScriptManager.RegisterClientScriptBlock(Page, Page.GetType(), "codejs", script, true);
        }

        protected void btnGravaFoto_Click(object sender, EventArgs e)
        {
            LojaAdminDataContext dc = new LojaAdminDataContext();
            int id = (short)(Convert.ToInt32(HiddenField1.Value));
            Produto produto = dc.GetTable<Produto>().Where<Produto>(p => p.ProID == id).SingleOrDefault();
            if (produto == null)
            {
                this.gravaProduto(dc);
            }

            if (fupFoto.HasFile)
            {
                try
                {
                    string pasta = Server.MapPath("~/../imagens/" + HiddenField1.Value.Trim() + '/');
                    string pastaVirtual = Page.ResolveUrl("~/../imagens/" + HiddenField1.Value.Trim() + '/');
                    if (!System.IO.Directory.Exists(pasta))
                    {
                        System.IO.Directory.CreateDirectory(pasta.Trim());
                    }
                    fupFoto.PostedFile.SaveAs(pasta + fupFoto.FileName);
                    Table<ProImg> tblImagem = dc.GetTable<ProImg>();
                    ProImg imagem = new ProImg();
                    imagem.ProID = (short)id;
                    imagem.PmgId = 1;
                    if (produto.ProImgs.Count > 0)
                    {
                        imagem.PmgId = (short)(produto.ProImgs.OrderByDescending(i => i.PmgId).Take(1).SingleOrDefault().PmgId + 1);
                    }
                    imagem.PmgLoc = pastaVirtual + fupFoto.FileName;
                    imagem.PmgNom = fupFoto.FileName;
                    tblImagem.InsertOnSubmit(imagem);
                    tblImagem.Context.SubmitChanges();
                    this.getData();
                }
                catch (Exception error)
                {
                    new Exception(error.Message + ' ' + error.HelpLink);
                }
            }
        }

        protected void btnGravaPrecos_Click(object sender, EventArgs e)
        {
            LojaAdminDataContext dc = new LojaAdminDataContext();
            int id = (short)(Convert.ToInt32(HiddenField1.Value));
            Produto produto = dc.GetTable<Produto>().Where<Produto>(p => p.ProID == id).SingleOrDefault();
            if (produto == null)
            {
                this.gravaProduto(dc);
            }
            Table<ProPeso> tblPreco = dc.GetTable<ProPeso>();
            ProPeso preco = new ProPeso();
            preco.ProID = (short)id;
            int pesId = 1;
            if (produto.ProPesos.Count > 0)
            {
                pesId = tblPreco.Where<ProPeso>(i => i.ProID == preco.ProID).OrderByDescending(i => i.PtmID).Take(1).SingleOrDefault().PtmID + 1;
            }
            preco.PtmID = (short)(pesId);
            preco.PtmPes = Convert.ToDecimal(txtPeso.Text);
            preco.PtmVal = Convert.ToDecimal(txtValor.Text);
            tblPreco.InsertOnSubmit(preco);
            tblPreco.Context.SubmitChanges();

            txtPeso.Text = string.Empty;
            txtValor.Text = string.Empty;
            getData();
        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            LojaAdminDataContext dc = new LojaAdminDataContext();
            gravaProduto(dc);
            Response.Redirect(Page.ResolveUrl("~/../Admin/cadastros/") + "listaprodutos.aspx");
            //getData();
        }

        protected void btnSair_Click(object sender, EventArgs e)
        {
            Response.Redirect(Page.ResolveUrl("~/../Admin/cadastros/") + "listaprodutos.aspx");
        }

        protected Produto gravaProduto(LojaAdminDataContext dc)
        {            
            Table<Produto> tblProduto = dc.GetTable<Produto>();
            int id = 0;
            Produto p = new Produto();
            if (!HiddenField1.Value.Equals("0") && !String.IsNullOrEmpty(HiddenField1.Value))
            {
                id = (short)(Convert.ToInt32(HiddenField1.Value));
                p = tblProduto.Where<Produto>(i => i.ProID == id).SingleOrDefault();
                p.ProDes = txtNome.Text;
                p.ProDesCom = editDescricao.Text;
                p.TppID = (short)(Convert.ToInt32(dpdTipo.SelectedValue));
            }
            else
            {
                if (id == 0 || id.Equals(null))
                {
                    if (tblProduto.Count() > 0)
                    {
                        p.ProID = (short)(tblProduto.OrderByDescending(i => i.ProID).Take(1).SingleOrDefault().ProID + 1);
                    }
                    else { p.ProID = 1; }
                    //tblProduto.InsertOnSubmit(p);
                    HiddenField1.Value = Convert.ToString(p.ProID);
                    p.ProID = (short)(Convert.ToInt32(HiddenField1.Value));
                    p.ProDes = txtNome.Text;
                    p.ProDesCom = editDescricao.Text;
                    p.TppID = (short)(Convert.ToInt32(dpdTipo.SelectedValue));
                    tblProduto.InsertOnSubmit(p);
                }
            }

            try
            {
                tblProduto.Context.SubmitChanges();
            }
            catch (Exception erro)
            {
                throw new Exception(erro.Message);
            }
            return p;            
            
        }

        protected void getData()
        {
            if (!HiddenField1.Value.Equals("0") && !String.IsNullOrEmpty(HiddenField1.Value))
            {
                LojaAdminDataContext dc = new LojaAdminDataContext();
                int id = (short)(Convert.ToInt32(HiddenField1.Value));
                Produto produto = dc.GetTable<Produto>().Where<Produto>(p => p.ProID == id).SingleOrDefault();
                if (produto != null)
                {
                    txtNome.Text = produto.ProDes;
                    editDescricao.Text = produto.ProDesCom;
                    dpdTipo.SelectedValue = produto.TppID.ToString();

                    rptFotos.DataSource = produto.ProImgs.ToList();
                    rptFotos.DataBind();

                    rptPrecos.DataSource = produto.ProPesos.ToList();
                    rptPrecos.DataBind();
                }
            }
        }

        protected void rptFotos_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (e.CommandName == "Delete")
            {
                int id = (short)(Convert.ToInt32(HiddenField1.Value));
                int imgId = (Convert.ToInt32(e.CommandArgument));
                LojaAdminDataContext dc = new LojaAdminDataContext();
                Table<ProImg> tblImagem = dc.GetTable<ProImg>();
                ProImg img = tblImagem.Where<ProImg>(i => i.ProID == id && i.PmgId == imgId).Single();
                string file = Server.MapPath("~/../imagens/" + HiddenField1.Value.Trim() + '/') + img.PmgNom;
                System.IO.File.Delete(file);
                tblImagem.DeleteOnSubmit(img);
                tblImagem.Context.SubmitChanges();
                this.getData();
            }
        }

        protected void rptPrecos_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (e.CommandName == "Delete")
            {
                int id = (short)(Convert.ToInt32(HiddenField1.Value));
                int preID = (Convert.ToInt32(e.CommandArgument));
                LojaAdminDataContext dc = new LojaAdminDataContext();
                Table<ProPeso> tblPeso = dc.GetTable<ProPeso>();
                ProPeso img = tblPeso.Where<ProPeso>(i => i.ProID == id && i.PtmID == preID).Single();
                tblPeso.DeleteOnSubmit(img);
                tblPeso.Context.SubmitChanges();
                this.getData();
            }
        }
    }
}